#include <stdio.h>

int main()
{
  int arr[4] = {10, 20, 30, 40};

  // 1. 数组指针示例
  int (*p_array)[4] = &arr; // p_array是指向整个数组的指针

  printf("数组指针:\n");
  printf("p_array地址: %p\n", (void *)p_array);
  printf("(*p_array)[0] = %d\n", (*p_array)[0]); // 访问第一个元素
  printf("(*p_array)[1] = %d\n", (*p_array)[1]); // 访问第二个元素

  // 指针算术：移动整个数组的大小
  printf("p_array + 1 地址: %p (前进%d字节)\n\n",
         (void *)(p_array + 1),
         (int)((char *)(p_array + 1) - (char *)p_array));

  // 2. 指针数组示例
  int a = 100, b = 200, c = 300, d = 400;
  int *arr_of_ptrs[4] = {&a, &b, &c, &d}; // 数组中的每个元素都是指针

  printf("指针数组:\n");
  for (int i = 0; i < 4; i++)
  {
    printf("arr_of_ptrs[%d] = %p, *arr_of_ptrs[%d] = %d\n",
           i, (void *)arr_of_ptrs[i], i, *arr_of_ptrs[i]);
  }

  return 0;
}